Skip to content

abegorov/linux10_rpm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Сборка RPM-пакета и создание репозитория

Задание

  • создать свой RPM (можно взять свое приложение, либо собрать к примеру Apache с определенными опциями);
  • cоздать свой репозиторий и разместить там ранее собранный RPM;
  • реализовать это все либо в Vagrant, либо развернуть у себя через Nginx и дать ссылку на репозиторий.

Решаемая задача

В дистрибутиве AlmaLinux 9.4 содержится старая версия Nginx (из репозитория можно установить только 1.20, а с помощью модулей только 1.24). На сайте nginx.org в настоящее время можно скачать версию 1.27. Помимо этого, Nginx отдаёт скудную статистику по http и не умеет отдавать метрики Prometheus. Решим все эти проблемы, создав репозиторий с Nginx 1.27.0, который будет отдавать метрики Prometheus и подробную статистику по http (с помощью дополнительного модуля nginx-module-vts). В результате в Vagrant запустится виртуальная машина с Nginx 1.27, который:

Реализация

Задание сделано на almalinux/9 версии v9.4.20240509. После загрузки запускается скрипт provision.sh, который выполняет всю настройку. Порт 80 гостевой машины пробрасывается, как 127.0.0.1:8080 на хосте. Вместо команд yum используются, аналогичные команды dnf.

Скрипт provision.sh:

  1. Ставит rpmdevtools и createrepo.
  2. Через dnf включает модуль nginx:1.24 и скачивает исходных коды nginx версии 1.24, после чего распаковывает их в /home/vagrant/rmpbuild.
  3. Скачивает исходные коды nginx версии 1.27.0 и nginx-module-vts версии 0.2.2.
  4. Обновляет в RPM спецификаций версию и Release, чтобы собиралась версия 1.27.0.
  5. Обновляет в исходных кодах и RPM спецификации PGP ключи, которыми подписаны исходные кода (так как имеющиеся устарели).
  6. Обновляет 0005-Init-openssl-engine-properly.patch (так как код nginx немного изменился и указанный патч не работает в версии 1.27.0).
  7. Отключает в спецификации патчи 0007-Enable-TLSv1.3-by-default.patch, 0008-add-ssl-pass-phrase-dialog.patch, 0009-CVE-2023-44487-HTTP-2-per-iteration-stream-handling.patch, так как они не применимы к версии 1.27.0.
  8. Правит спецификацию RPM, чтобы nginx сразу собирался с модулем nginx-module-vts.
  9. Обновляет конфигурацию nginx по умолчанию, так чтобы nginx-module-vts был включён и отдавал статистику по /status и метрики Prometheus по /metrics.
  10. Обновляет changelog в спецификации.
  11. Собирает nginx и RPM пакеты по исправленной спецификации.
  12. Создаёт репозиторий в каталоги /var/www/repo и восстанавливает в нём SELinux Security Context (иначе nginx не сможет отдавать из него файлы).
  13. Ставит nginx версии 1.24 и добавляет указанный выше репозиторий, как localhost через файл /etc/yum.repos.d/localhost.repo.
  14. Через dnf отлючает модуль nginx:1.24.
  15. Обновляет nginx из репозитория localhost (поскольку конфигурация не менялась, то она обновляется автоматически).

Запуск

Необходимо скачать VagrantBox для almalinux/9 версии v9.4.20240509 и добавить его в Vagrant под именем almalinux/9/v9.4.20240509. Сделать это можно командами:

curl -OL https://app.vagrantup.com/almalinux/boxes/9/versions/9.4.20240509/providers/virtualbox/amd64/vagrant.box
vagrant box add vagrant.box --name "almalinux/9/v9.4.20240509"

После этого достаточно сделать vagrant up, при запуске будет автоматически запущен скрипт provision.sh, который сделает все указанные выше настройки. Протестировано в Vagrant 2.3.7.

Проверка

После того, как скрипт отработает для проверки можно открыть следующие URL:

  • http://localhost:8080/repo/ - репозиторий с собранной версией nginx;
  • http://localhost:8080/status - статистика nginx в формате HTML, с указанием версии (версии 1.27.0 нет в AlmaLinux и стандартный nginx не умеет отдавать такую статистику);
  • http://localhost:8080/metrics - метрики Prometheus (стандартный nginx не умеет их отдавать).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages